package co.edu.udea.xyz.dao.hibernate;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.xyz.dao.EncuestaDAO;
import co.edu.udea.xyz.dto.Encuesta;
import co.edu.udea.xyz.util.exception.XYZException;

/**
 * Clase EncuestaDAOHibernate 
 * Hereda HibernateDaoSupport
 * Implementa EncuestaDAO
 * 
 * Contiene los metodos para el manejo de las Encuestas.
 * @author CesarGuapacha
 *
 */
public class EncuestaDAOHibernate extends HibernateDaoSupport implements
		EncuestaDAO {

	public EncuestaDAOHibernate() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Metodo para obtener una lista de Encuestas
	 * que contiene la tabla ENCUESTAS de la Base de Datos.
	 */
	@Override
	public List<Encuesta> obtener() throws XYZException {
		Session session = null;
		List<Encuesta> encuestas = new ArrayList<Encuesta>();
		
		try{
			session = getSession();
			Criteria criteria = session.createCriteria(Encuesta.class);
			encuestas = criteria.list();
		}catch(HibernateException e){
			throw new 	XYZException(e);
		}
		return encuestas;
	}

	/**
	 * Metodo Obtener encuesta segun su idEncuesta.
	 * @param IdEncuesta de la encuesta
	 * @return encuensta 
	 */
	@Override
	public Encuesta obtener(int idEncuesta) throws XYZException {
		Session session = null;
		Encuesta encuesta = null;
		
		try{
			session = getSession();
			encuesta = (Encuesta)session.get(Encuesta.class, idEncuesta);
			if(encuesta == null){
				throw new XYZException("idEncuesta no registrada");
			}	
		}catch(HibernateException e){
			throw new XYZException(e);
		}
		return encuesta;
	}

	/**
	 * Metodo que guarda una encuesta en la base de datos
	 * @param Encuesta
	 */
	@Override
	public void guardar(Encuesta encuesta) throws XYZException {
		Session session = null;
		Transaction tx = null;
		
		try{
			session = getSession();
			tx = session.beginTransaction();
			session.save(encuesta);
			
		}catch(HibernateException e){
			throw new XYZException(e);
		}

	}

	/**
	 * Metodo que actualiza una encuesta en la base de datos
	 * @param Encuesta
	 */
	@Override
	public void actualizar(Encuesta encuesta) throws XYZException {
		Session session = null;
		Transaction tx = null;
		
		try{
			session = getSession();
			tx = session.beginTransaction();
			session.update(encuesta);
			
		}catch(HibernateException e){
			throw new XYZException(e);
		}

	}

}
